Provisioning is a set of actions to prepare a system with appropriate data and software to make it ready for operation. Typical tasks performed during provisioning include selecting software to be installed (e.g., including an operating system, device drivers, middleware and/or one or more applications), downloading the software to a resource (e.g., a hardware resource such as a computer or a virtual machine resource), installing the software, customizing and configuring the software, and setting parameters such as IP address and IP gateway enable the finding of associated network and storage resources. Typically, provisioning is performed after authenticating a resource to which software will be provisioned. However, some systems may not have credentials (e.g., a digital certificate) that may be used to perform authentication. For example, new hardware resources that have not had an operating system installed thereon (e.g., bare metal hardware) may not have credentials to perform authentication. Accordingly, provisioning systems typically do not perform authentication before provisioning operating systems to bare metal hardware. This can expose the provisioning system to attack.